package com.heima.article;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableAsync;


@SpringBootApplication
@EnableDiscoveryClient
@MapperScan("com.heima.article.mapper")
@EnableAsync
@EnableFeignClients(basePackages= "com.heima.apis")
public class ArticleApplication {

    public static void main(String[] args) {
        SpringApplication.run(ArticleApplication.class,args);
    }

    /**
     * 这段代码的意义在于配置 MyBatis-Plus 的分页插件，即使不配置也可以使用内存分页进行查询。
     *
     * 虽然 MyBatis-Plus 的 list 方法可以进行内存分页查询，但配置分页插件有以下几个优点：
     *
     * 自动分页: 配置分页插件后，MyBatis-Plus 可以自动根据传入的分页参数生成对应的 SQL，进行数据库分页查询。这样可以避免手动编写分页 SQL 的麻烦，提高开发效率。
     *
     * 更灵活的分页功能: 分页插件支持更多的分页功能选项，如限制每页最大返回记录数、配置是否查询总记录数等。通过分页插件的配置，可以实现更加灵活和高级的分页查询需求。
     *
     * 支持多种数据库: 分页插件支持多种数据库类型，只需要根据实际使用的数据库类型进行配置（如上述代码中的 DbType.MYSQL），就可以实现跨数据库的分页功能。
     *
     * 因此，在实际开发中，如果需要更加方便、灵活地进行分页查询，或者要支持多种数据库的分页功能，那么配置分页插件是有意义的。但如果仅进行简单的内存分页查询，可以不配置分页插件而直接使用内置的 list 方法。
     * @return
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}
